/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Protocol_EagoTech_CAN.c
** 模块名称： EagoTechCAN协议处理模块
** 版 本 号： V1.0
** 作    者： 蒲磊
**
** 修改记录： 版本     修改人      时间         修改内容
******************************************************************************/
#ifndef __APP_PROTOCOL_EAGOTECH_CAN_H_
#define __APP_PROTOCOL_EAGOTECH_CAN_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')
******************************************************************************/
#define CAN_LOOP_CYCLE              20      /*vPROTOCOL_Loop()函数的循环调用周期，单位：ms*/
#define gxCAN_RxQueue               0x00    /*Can接收FIFO队列ID*/
#define gxCAN_TxQueue               0x01    /*Can发送FIFO队列ID*/
#define gxCAN_RxQueue_Len           (sizeof(can_rx_message_type) * 30)    /*FIFO长度，30个元素长度*/
#define gxCAN_TxQueue_Len           (sizeof(can_tx_message_type) * 30)
/******************************************************************************
* 类型定义 ('typedef')
******************************************************************************/

/*控制器消息结构体*/
typedef struct
{
    uint16_t    Speed;                  /*0.1km/h*/
    uint16_t    Current;                /*电流值，单位0.01A*/
    uint16_t    Voltage;                /*电压值，单位0.01V*/
    uint32_t    ErrorCode;              /*故障代码*/
    uint16_t    Power;                  /*电机功率*/
    uint16_t    Range;                  /*剩余里程，km*/
    uint16_t    Remaining_Time;         /*剩余时间，sec*/
    uint16_t    Trip;                   /*Trip,0.1km*/
    uint16_t    Odo;                    /*ODO,1km*/
} strMCUInfo;

/*BMS消息结构体*/
typedef struct
{
    uint16_t    Voltage;                /*总电压，mV*/
    int16_t     Current;                /*总电流，0.01A，充电为正，放电为负*/
    int16_t     Soc;                    /*电量百分比,-1表示无效*/
    uint32_t    ErrCode;                /*报错代码*/
} strBatteryInfo;

/*仪表消息结构体*/
typedef struct
{
    uint8_t		Lamp;                   /*大灯状态*/
    uint8_t		Walk;                   /*助推状态*/
    uint8_t		Pas;                    /*档位*/
    uint8_t     Unit;                   /*单位类型，0-km,1-mile*/
    uint8_t     PowerOff;               /*关机请求*/

} strDisplayInfo;

/*定义车辆信息结构体*/
typedef    struct
{
    strBatteryInfo    Battery;
    strMCUInfo		  MCU;
    strDisplayInfo    Display;
    uint8_t			  ErrCode;

} strBikeInfo;


/******************************************************************************
* 全局变量声明
******************************************************************************/

/******************************************************************************
* 函数声明
******************************************************************************/
void vPROTOCOL_Init(void);
void vPROTOCOL_Loop(void);
void vPROTOCOL_Send_Run_Data(void);
void vPROTOCOL_Send_Config_Data(void);
void vPROTOCOL_Send_Config_Data_OneTime(void);

void vCAN_CanMsgToUserMsg(can_rx_message_type *pCanMessage);
void vPROTOCOL_Set_PowerOff(void);
void vPROTOCOL_Set_ClearTrip(uint8_t Cmd);
void vPROTOCOL_Set_Lamp(uint8_t State);
void vPROTOCOL_Set_Pas(int8_t Pas);
void vPROTOCOL_Set_Unit(uint8_t Unit);

void vPROTOCOL_Set_Value_When_ExitSetting(void);
void vPROTOCOL_Set_Value_When_PowerOn(void);

uint16_t    usPROTOCOL_Get_Current(void);
uint16_t    usPROTOCOL_Get_Voltage(void);
uint16_t    usPROTOCOL_Get_Speed(void);
uint8_t     ucPROTOCOL_Get_Errcode(void);
int8_t       cPROTOCOL_Get_Soc(void);
uint16_t    usPROTOCOL_Get_Power(void);
uint16_t    usPROTOCOL_Get_Trip(void);
uint16_t    usPROTOCOL_Get_Odo(void);
uint16_t    usPROTOCOL_Get_Range(void);

uint16_t    usPROTOCOL_Get_BMS_Voltage(void);
int16_t      sPROTOCOL_Get_BMS_Current(void);
int8_t       cPROTOCOL_Get_BMS_SOC(void);



void vPROTOCOL_Send(void);
void vPROTOCOL_ResetCommunicationOverTime(void);



void vPROTOCOL_Factory_Command(can_rx_message_type *pCanRxMsg);

#endif
